package com.cs.beneficios.business.entity;

import com.cs.beneficios.business.model.AtributoVO;
import com.cs.beneficios.business.model.BeneficiarioVO;
//import com.cs.beneficios.business.model.ProgramaVO;
import com.cs.beneficios.common.ConnectionFactory;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

//import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;

public class RenovarDAO {
	/**
	 * Conexion a la base de datos.
	 */
	private Connection conn = null;
	private ConnectionFactory cf;

	/**
	 * Constructor que inicializa la conexion con la base de datos.
	 * 
	 * @param conn
	 *            Conexion con la base de datos.
	 */

	public RenovarDAO(ConnectionFactory cf) {
		this.cf = cf;
		try {
			this.conn = this.cf.getConnection();
		} catch (SQLException e) {
		}
	}

	public Collection GetAtributosSubpro(String codesubpro) throws SQLException {

		int codeSub = Integer.parseInt(codesubpro.trim());
		String query = "SELECT CODIGO, NOMBRE, TIPO_DATO, TIPO_ATRIBUTO "
				+ "FROM TCS_BEN_SUBP_ATR_BENEFICIARIO WHERE SBPR_CODIGO="
				+ codeSub + " " + "AND VIGENCIA='A' AND CAMPO_A2 IS NULL";
		List lAtributos = new LinkedList();
		ResultSet rst = null;
		rst = cf.getRecordsRset(query, null, conn);
		AtributoVO objatri;
		while (rst.next()) {
			objatri = new AtributoVO();
			objatri.setCodatributo(rst.getString("CODIGO"));
			objatri.setNombre(rst.getString("NOMBRE"));
			objatri.setTipodato(rst.getString("TIPO_DATO"));
			objatri.setTipoatributo(rst.getString("TIPO_ATRIBUTO"));
			lAtributos.add(objatri);
			objatri = null;
		}
		return lAtributos;
	}

	public String Getbeneficiarioatri(String tipodato, String codebene,
			String codeatri) throws SQLException {

		String strSeleccion = "";
		String strValor = null;
		if (tipodato.equals("N")) {
			strSeleccion = "VALOR_NUM_ATR";
		} else if (tipodato.equals("F")) {
			strSeleccion = "TO_CHAR(VALOR_FEC_ATR,'DD/MM/YYYY')";
		} else {
			strSeleccion = "VALOR_CAR_ATR";
		}

		int codbeneficiario = Integer.parseInt(codebene.trim());
		int codatri = Integer.parseInt(codeatri.trim());
		String query = "SELECT " + strSeleccion
				+ " valor FROM TCS_BEN_BENEFICIARIO_ATRIBUTO "
				+ "WHERE SAB_CODIGO = " + codatri + " " + "AND BEN_CODIGO = "
				+ codbeneficiario;
		// System.out.println(query);
		ResultSet rst = null;
		rst = cf.getRecordsRset(query, null, conn);
		if (rst.next()) {
			strValor = rst.getString("valor");
		}
		return strValor;
	}

	/*
	 * public ResultSet Getbeneficiarioatri(String tipodato, String codebene,
	 * String codeatri) throws SQLException{
	 * 
	 * String strSeleccion = ""; if(tipodato.equals("N")) { strSeleccion =
	 * "VALOR_NUM_ATR"; }else if(tipodato.equals("F")) { strSeleccion =
	 * "TO_CHAR(VALOR_FEC_ATR,'DD/MM/YYYY')"; }else { strSeleccion =
	 * "VALOR_CAR_ATR"; }
	 * 
	 * int codbeneficiario = Integer.parseInt(codebene.trim()); int codatri =
	 * Integer.parseInt(codeatri.trim()); String query =
	 * "SELECT "+strSeleccion+" valor FROM TCS_BEN_BENEFICIARIO_ATRIBUTO "+
	 * "WHERE SAB_CODIGO = "+codatri+" "+
	 * "AND BEN_CODIGO = "+codbeneficiario+" "+
	 * "AND CAMPO_F1 = (SELECT MAX(CAMPO_F1) "+
	 * "FROM TCS_BEN_BENEFICIARIO_ATRIBUTO WHERE SAB_CODIGO = "+codatri+" "+
	 * "AND BEN_CODIGO = "+codbeneficiario+")"; System.out.println(query);
	 * ResultSet rst = null; rst = cf.getRecordsRset(query,null,conn); return
	 * rst; }
	 */

	public ResultSet Getbeneficioatri(String tipodato, String codebeneotor,
			String codeatri) throws SQLException {

		String strSeleccion = "";
		if (tipodato.equals("N")) {
			strSeleccion = "VALOR_NUM_ATR";
		} else if (tipodato.equals("F")) {
			strSeleccion = "TO_CHAR(VALOR_FEC_ATR,'DD/MM/RRRR')";
		} else {
			strSeleccion = "VALOR_CAR_ATR";
		}

		int codbeneotor = Integer.parseInt(codebeneotor.trim());
		int codatri = Integer.parseInt(codeatri.trim());
		String query = "SELECT " + strSeleccion
				+ " valor FROM TCS_BEN_BENEFICIO_ATRIBUTO "
				+ "WHERE BOT_CODIGO= " + codbeneotor + " "
				+ "AND SAB_CODIGO = " + codatri + " ";
		ResultSet rst = null;
		rst = cf.getRecordsRset(query, null, conn);
		return rst;
	}

	public List GetBeneficioOtorgado(String codesubpro, String codebene)
			throws SQLException {

		int codbeneficiario = Integer.parseInt(codebene.trim());
		int codsubpro = Integer.parseInt(codesubpro.trim());
		List lretornar = new LinkedList();
		String query = "SELECT MAX(CODIGO) codbot, SEDE_CODIGO sede FROM TCS_BEN_BENEFICIO_OTORGADO "
				+ "WHERE SBPR_CODIGO="
				+ codsubpro
				+ " "
				+ "AND BEN_CODIGO="
				+ codbeneficiario
				+ " "
				+ "AND FECHA_BENEFICIO=(SELECT MAX(FECHA_BENEFICIO) FROM TCS_BEN_BENEFICIO_OTORGADO "
				+ "WHERE SBPR_CODIGO="
				+ codsubpro
				+ " AND BEN_CODIGO="
				+ codbeneficiario + ") " + "GROUP BY SEDE_CODIGO";
		ResultSet rst = null;
		rst = cf.getRecordsRset(query, null, conn);
		if (rst.next()) {
			lretornar.add(rst.getString("codbot"));
			lretornar.add(rst.getString("sede"));
		}
		return lretornar;
	}

	public void GetBeneOtorDesabilitar(String codesubpro, String codebene,
			String codesede) throws SQLException {

		int codbeneficiario = Integer.parseInt(codebene.trim());
		int codsubpro = Integer.parseInt(codesubpro.trim());
		int codsede = Integer.parseInt(codesede.trim());
		String query = "SELECT CODIGO FROM TCS_BEN_BENEFICIO_OTORGADO "
				+ "WHERE SBPR_CODIGO=" + codsubpro + " " + "AND BEN_CODIGO="
				+ codbeneficiario + " " + "AND SEDE_CODIGO=" + codsede + " "
				+ "AND CAMPO_A1 IS NULL";
		ResultSet rst = null;
		rst = cf.getRecordsRset(query, null, conn);
		while (rst.next()) {
			int codbeneotor = rst.getInt("CODIGO");
			ModiBeneotorCampoA1(codbeneotor);
		}

	}

	public List GetBeneficiarios(String codesubpro, String codesede)
			throws SQLException {

		int codsubpro = Integer.parseInt(codesubpro.trim());
		int codsede = Integer.parseInt(codesede.trim());
		String query = "SELECT DISTINCT bot.BEN_CODIGO codebene,ben.PRIMER_NOMBRE nom1bene,ben.SEGUNDO_NOMBRE nom2bene, "
				+ "ben.PRIMER_APELLIDO ape1bene, ben.SEGUNDO_APELLIDO ape2bene, ben.TIPO_DOCUMENTO tipodoc, "
				+ "ben.NUMERO_DOCUMENTO numdoc, TO_CHAR "
				+ "   ((SELECT MAX(FECHA_BENEFICIO) "
				+ "   FROM TCS_BEN_BENEFICIO_OTORGADO bot1,TCS_BEN_BENEFICIARIO ben1 "
				+ "   WHERE bot1.SBPR_CODIGO="
				+ codsubpro
				+ " AND bot1.SEDE_CODIGO="
				+ codsede
				+ "   AND bot1.BEN_CODIGO=ben1.codigo),'DD/MM/RRRR')fecha "
				+ "FROM TCS_BEN_BENEFICIO_OTORGADO bot,TCS_BEN_BENEFICIARIO ben, "
				+ "TCS_BEN_SUBPROGRAMA sub "
				+ "WHERE bot.SBPR_CODIGO = "
				+ codsubpro
				+ " AND  bot.SEDE_CODIGO = "
				+ codsede
				+ " AND  ben.CODIGO = bot.BEN_CODIGO "
				+ " AND sub.CODIGO = bot.SBPR_CODIGO "
				+ " AND (CASE WHEN DECODE(bot.CAMPO_A1,'I',-1,TO_NUMBER(SYSDATE - (SELECT MAX(CAMPO_F1) "
				+ "                                                               FROM TCS_BEN_BENEFICIO_OTORGADO "
				+ "                                                               WHERE SBPR_CODIGO="
				+ codsubpro
				+ "                                                               AND BEN_CODIGO=ben.CODIGO "
				+ "                                                               AND SEDE_CODIGO="
				+ codsede
				+ "))) "
				+ "     >= to_number(nvl(sub.CAMPO_A3,0)+1) "
				+ "     THEN 'Si' ELSE 'No' END) = 'Si' ";

		// System.out.println(query);
		ResultSet rst = null;
		rst = cf.getRecordsRset(query, null, conn);
		List lbeneficiarios = new LinkedList();
		BeneficiarioVO benevo = null;
		while (rst.next()) {
			benevo = new BeneficiarioVO();
			benevo.setCode(new Long(rst.getString("codebene")));
			benevo.setNombre1(rst.getString("nom1bene"));
			benevo.setNombre2(rst.getString("nom2bene"));
			benevo.setPrimerApellido(rst.getString("ape1bene"));
			benevo.setSegundoApellido(rst.getString("ape2bene"));
			if (rst.getString("tipodoc").equals("O")) {
				benevo.setTipoDocumento("NO TIENE");
			} else if (rst.getString("tipodoc").equals("C")) {
				benevo.setTipoDocumento("CEDULA DE CIUDADANIA");
			} else if (rst.getString("tipodoc").equals("E")) {
				benevo.setTipoDocumento("CEDULA DE EXTRANJERIA");
			} else if (rst.getString("tipodoc").equals("N")) {
				benevo.setTipoDocumento("NIT");
			} else if (rst.getString("tipodoc").equals("P")) {
				benevo.setTipoDocumento("PASAPORTR");
			} else if (rst.getString("tipodoc").equals("R")) {
				benevo.setTipoDocumento("REGISTRO CIVIL");
			} else if (rst.getString("tipodoc").equals("T")) {
				benevo.setTipoDocumento("TARJETA DE IDENTIDAD");
			} else if (rst.getString("tipodoc").equals("I")) {
				benevo.setTipoDocumento("NIP");
			} else if (rst.getString("tipodoc").equals("U")) {
				benevo.setTipoDocumento("NUIP");
			} else if (rst.getString("tipodoc").equals("S")) {
				benevo.setTipoDocumento("NISE");
			} else if (rst.getString("tipodoc").equals("A")) {
				benevo.setTipoDocumento("CABILDO");
			}

			benevo.setNumeroDocumento(rst.getString("numdoc"));
			benevo.setFechaNacimiento(rst.getString("fecha"));
			lbeneficiarios.add(benevo);
			benevo = null;
		}
		return lbeneficiarios;
	}

	public void ModiBeneotorCampoA1(int codebeneotor) throws SQLException {

		String query = "UPDATE TCS_BEN_BENEFICIO_OTORGADO SET "
				+ "CAMPO_A1 = 'I'" + "WHERE CODIGO=" + codebeneotor + "";

		int ActualizoCorrectamente = cf.execSql(query, null, conn);
	}

	public Connection getConn() {
		return conn;
	}
}